type Listener = () => void;
//全局的监听器
const docVisibleListeners: Listener[] = [];

export function subscribeReVisible(fn: Listener) {
  docVisibleListeners.push(fn);
  return () => {
    const index = docVisibleListeners.indexOf(fn);
    if (index > -1) {
      docVisibleListeners.splice(index, 1);
    }
  };
}

//触发条件：
// 切换浏览器tab(页面在后台标签页中)
//  浏览器最小/大化 。
// 浏览器全屏时，切屏动作
// 刷新，关闭，打开浏览器窗口时不会执行
const revalidate = () => {
  //不可见时不执行
  if (document.visibilityState === 'hidden') return;
  docVisibleListeners.forEach((listener) => {
    listener();
  });
};

window.addEventListener('visibilitychange', revalidate, false); //如是否捕获事件:false